package PuntoVentaDAOS;

import Herramientas.PasarelaDatos;
import Herramientas.ResultSets;
import PuntoVentaDTOS.ArticuloVentaDTO;
import PuntoVentaDTOS.PerfilArticuloDTO;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author AlanGR
 */
public class CatalogoProductosDAO {

    private PasarelaDatos db;
    private ResultSets results;

    public CatalogoProductosDAO() {
        db = new PasarelaDatos();
        results = new ResultSets();
    }

    /**
     * ALAN GONZALEZ
     *
     * @return
     */
    public Vector productos() {
        Vector productos = new Vector();
        String sql = "select * from catalogo";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            while (rst.next()) {
                PerfilArticuloDTO p = new PerfilArticuloDTO();
                p = results.perfilArticuloDTO(rst);
                productos.add(p);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return productos;
    }

    /**
     * ALAN GONZALEZ REGISTRO DE UN NUEVO PRODUCTO
     *
     * @param p
     */
    public void registroProductoNuevo(PerfilArticuloDTO p) {
        db.openDatabase();
        String sql = new String();

        sql += " INSERT INTO `catalogo` SET";
        sql += " cb = '" + p.getCb() + "'";
        sql += " , descripcion = '" + p.getDescripcion() + "'";
        sql += " , id_um =" + p.getId_um();
        sql += " , um ='" + p.getUm() + "'";
        sql += " , razon_social_proveedor ='" + p.getRazon_social_proveedor() + "'";
        sql += " , existencia_neta =" + p.getExistencia_neta();
        sql += " , costo_unitario =" + p.getCostoUnitario();
        sql += " , precio_publico  =" + p.getPrecioPublico();
        sql += " , ubicacion_fisica = '" + p.getUbicacionFisica() + "'";
        sql += " , tipo=" + p.getTipo();

        db.execute(sql);
        db.closeDatabase();
    }

    /**
     * ALAN GONZALEZ DESCUENTA LAS EXISTENCIAS DEL INVENTARIO CUANDO
     *
     * @param listaCompra
     */
    public void actualizaExistenciasPorVenta(Vector listaCompra) {
        int aux = 0;
        for (aux = 0; aux < listaCompra.size(); aux++) {
            ArticuloVentaDTO art = (ArticuloVentaDTO) listaCompra.elementAt(aux);
            String cb = art.getCb();
            double cantidad = art.getCantidad();
            String sql ="update catalogo set catalogo.`existencia_neta` = catalogo.`existencia_neta`-"+cantidad+" where catalogo.cb='"+cb+"';";
            db.openDatabase();
            db.execute(sql);
            db.closeDatabase();
        }
    }
    
    /**
     * ALAN GONZALEZ OBTIENE UN VECTOR CON TODOS LOS GRANELES QUE CORRESPONDEN A UNA PALABRA DE BUSQUEDA 
     * @param palabraClave
     * @return 
     */
    public Vector productosFiltroNombre(String palabraClave) {
        Vector productos = new Vector();
        //String sql = "select * from catalogo where catalogo.`descripcion` like '%"+palabraClave+"%'";
          String sql = "select * from catalogo where catalogo.`descripcion` like '%"+palabraClave+"%' and catalogo.id_um = 2";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            while (rst.next()) {
                PerfilArticuloDTO p = new PerfilArticuloDTO();
                p = results.perfilArticuloDTO(rst);
                productos.add(p);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return productos;
    }
    
    /**
     * ALAN GONZALEZ OBTIENE EL CATALOGO DE TODOS LOS GRANELES REGISTRADOS DENTRO DEL CATALOGO
     * @param palabraClave
     * @return 
     */
    public Vector productosGranel() {
        Vector productos = new Vector();
          String sql = "select * from catalogo where  catalogo.id_um = 2";
          System.out.println(sql);
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            while (rst.next()) {
                PerfilArticuloDTO p = new PerfilArticuloDTO();
                p = results.perfilArticuloDTO(rst);
                productos.add(p);
            }
        } catch (SQLException ex) {
            Logger.getLogger(CatalogoProductosDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        System.out.println("tamaño vector"+productos.size());
        db.closeDatabase();
        return productos;
    }
    
    
    /**
     * ALAN GONZALES METODO QUE DEVUELVE UN PERFIL COMPLERO DEL PRODUCTO MEDIANTE CODIGO DE BARRAS
     * @param cb
     * @return 
     */
    public PerfilArticuloDTO perfilArticulo(String cb) {
        PerfilArticuloDTO perfil = new PerfilArticuloDTO();
        String sql = "select * from catalogo where catalogo.cb = '" + cb + "'";
        db.openDatabase();
        ResultSet rst = db.executeQuery(sql);
        try {
            if (rst.next()) {
                perfil = results.perfilArticuloDTO(rst);
            } else {
                perfil = null;
            }
        } catch (SQLException ex) {
            Logger.getLogger(ArticulosVentaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
        db.closeDatabase();
        return perfil;
    }
}
